查看原文
其他

首战Kaggle之实战教学

2017-12-24 zhaikun Python爱好者社区

作者:zhaikun   风控建模屌丝一枚,现居于北京

个人微信公众号:Python数据分析与评分卡建模


看过kaggle比赛,学习过kaggle大神代码,但由于各种各样原因一直未实际参加过kaggle比赛,也算是小萌新吧。相信也有很多小伙伴听说过kaggle,想参加,却一直没时间参加或不知道怎么参加,今天就做次教学吧。


泰坦尼克号是 kaggle 的比赛入门项目之一,网站 https://www.kaggle.com/c/titanic/leaderboard。


不要听书新手比赛就小瞧他,抛开其中的历史含义与其中的代价,这个数据集是个非常经典的数据集。经典道什么程度呢?

1.他基本包含了你建模过程中的所有变量类型和数据处理方法

2.891个训练样本,418个测试样本,那么所有关于模型的想法、组合与测试,都可以在这个数据集上得到快速反馈

3.9725个参赛队伍,你很容易知道你与别人的差距,快速进步


下面开始正文,首先是老司机教你们怎么玩转kaggle。



共9725个队伍,先看rules。



提交限制:每天最多提交10次


比赛时间:Start Date: 9/28/2012 9:13 PM UTC   ,End Date: 1/7/2020 12:00 AM UTC


所以这是一个正在进行中的比赛,我们可以参加。



在Evaluation中,我们看见评价指标是 accuracy,不是ks,不是auc,所以之后模型调优的时候,调优指标不要选错了。



在Data里,有训练集和测试集,还有提交示例。我们用训练集训练模型,在测试集上预测,预测的结果按照示例提交给kaggle。



提交示例是这样的,左边是id,右边是标签。


预测出结果后,在提交页面点击提交:Submit Predictions,ok,然后等打分和排名。



现在开始代码:



预览:


原先的变量名不符合我的习惯,变量重命名:


缺失值可视化:



删除缺失比例0.5以上的特征


看目标变量分布:


1是生存,0是死亡。


接下来把变量分成分类变量与连续变量,先单变量可视化。

其中 name:


ticket_info:


有大神说这可以特征衍生,我在这里就不做了,直接删除。


brothers_sisters 是兄弟姐妹的数量:


parents_children 是父母子女的数量:



大神也说可以衍生,但是我看到的水平分布严重不平衡,我在这里就简单的合并一下,水平2以上的,合并为2+。


单分类变量处理好后,我们看分类变量与目标变量的关系。可视化:




敏锐的人应该发现:

一等乘客、女性、兄弟姐妹少、父母子女多的人,生存概率较大,至于港口,C港口的存活大,为什么呢?现在不知道。


再看连续变量与目标变量之间的关系,可视化:

年龄和船价是有异常的,我们作了1个简单处理,age 65以上的作为65,船家150以上的作为150。我们发现年龄特别小的人,0岁左右,生存概率大;船价特别高的人,基本都生存了。

好吧,孩子是希望,富翁是贵族,至于其他,也许是rose,也许是jack呢。




好,保存文件,下面补缺。

以前我批量补缺一般连续变量随机抽样,分类变量用众数,最近学到了一个建模法补缺,很高逼格呀。但是建模法补缺限制挺多,这里我们只选择了重要变量进行建模法补缺。什么是重要变量,下面告诉你。先是原先的补缺方法:


补缺后,连续变量标准话,分类变量哑变量,怎么操作请看我之前的文章。


预览:



在我看来,重要变量就是我们用随机森林重要性、gbdt重要性删选出的变量。

随机森林重要性中,明显的age、price、sex特别重要



GBDT中,price、age特别重要


好,我们选择了最重要的变量col_top 和 相对较重要的变量feature_selection



返回前面对 col_top 进行 随机森林回归建模法补缺。


补缺后,重复上面的数据处理过程,保存文件和变量。


下面我们开始建模。



逻辑回归对共线性、显著性较为敏感,所以我们先共线性筛选变量。

有vif是无穷大的,逐个筛选。

vif到10以下,我们就暂且不筛了,然后是显著性筛选,最后汇总:


这几个变量都较为显著,权重也较为显著。下面我们再判断下相关性:


brothers_sisters_0和brothers_sisters_1十分相关,两个可以删除1个。




然后上学习曲线,判断是否过拟合:



发现还可以。再看ROC和KS



下面介绍一个模型融合之bagging.






觉得没显著变化。


然后我又试验了随机森林rfc、GBDT、Xgbt、vc1和vc2,得出的模型效果如下,score是Kaggle给的分数。



然后我把预测结果分别提交:


我们先看下总排行榜:



总共是9727个队伍,我最好成绩是2528名。那么总结一下,就模型而言,我基本做到差不多了,那么欠缺的主要是特征工程。所以,特征工程决定了你模型的质量,切记!

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门视频课程!!!

崔老师爬虫实战案例免费学习视频。

丘老师数据科学入门指导免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存